package com.hmall.item.web;

import com.hmall.common.dto.ItemDTO;
import com.hmall.common.dto.PageResult;
import com.hmall.item.constatnts.MqConstants;
import com.hmall.item.service.ItemService;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.lang.reflect.InvocationTargetException;

@RestController
@RequestMapping("item")
public class ItemController {
    @Autowired
    private ItemService itemService;
    @Autowired
    private RabbitTemplate rabbitTemplate;
    /**
     * 分页查询商品
     *
     * @param page 页码
     * @param size 每页显示的条数
     * @return 分页结果对象
     */
    @GetMapping("/list")
    public PageResult findItem(@RequestParam("page") Integer page, @RequestParam("size") Integer size) {
        return itemService.findItem(page, size);
    }

    /**
     * 根据id查询商品详情
     *
     * @param id 商品id
     * @return 商品详情
     */
    @GetMapping("/{id}")
    public ItemDTO findItemById(@PathVariable("id") Long id) throws InvocationTargetException, IllegalAccessException {
        return itemService.findItemById(id);
    }

    /**
     * 新增商品
     *
     * @return void
     */
    @PostMapping
    public void saveItem(@RequestBody ItemDTO itemDTO) {
        itemService.saveItem(itemDTO);
    }

    /**
     * 修改商品
     *
     * @param itemDTO 商品信息
     * @return void
     */
    @PutMapping
    public void updateItem(@RequestBody ItemDTO itemDTO) {
        itemService.updateItem(itemDTO);
    }

    /**
     * 根据id修改商品状态
     */
    @PutMapping("/status/{id}/{status}")
    public void updateItemStatus(@PathVariable("id") Long id, @PathVariable("status") Integer status) {
        itemService.updateItemStatus(id, status);
        if (status==1){
            rabbitTemplate.convertAndSend(MqConstants.HMALL_EXCHANGE,MqConstants.HMALL_INSERT_KEY,id);
        }else {
            rabbitTemplate.convertAndSend(MqConstants.HMALL_EXCHANGE,MqConstants.HMALL_DELETE_KEY,id);
        }
    }
        /**
         * 删除商品
         */
        @DeleteMapping("/{id}")
        public void deleteItemById(@PathVariable("id") Long id){
            itemService.deleteItemById(id);
        }


//    /**
//     * 订单购买,没支付 商品数据恢复
//     * @param itemId
//     * @param num
//     */
//    @PutMapping("/stockUp/{itemId}/{num}")
//    public void stockUp(@PathVariable("itemId") Long itemId,@PathVariable("num") Integer num) {
//        itemService.stockUp(itemId,num);
//    }
//
//    /**
//     * 订单购买,有支付 商品数据减少
//     * @param itemId
//     * @param num
//     */
//    @PutMapping("/stock/{itemId}/{num}")
//    public void stock(@PathVariable("itemId") Long itemId,@PathVariable("num") Integer num){
//        itemService.stockMinus(itemId,num);
//    }

    @PutMapping("/stock/{itemId}/{num}")
    public  void updateStock(@PathVariable Long itemId,@PathVariable Integer num){
        try {
            //执行sql update tb_item set stock=stock-#{num} where id=#{itemId}
            itemService.update().setSql("stock=stock-"+num).eq("id",itemId).update();
        } catch (Exception e) {
            throw  new RuntimeException("库存不足！！！");
        }
    }
}
